دسته بندی ها
16:03 1399/06/06

روش استفاده از interface در جاوا و اندروید

مشخصات سوال کننده :
کاربر : farshad_gh     امتیاز کاربر : 0     رتبه کاربر : 7080
دسته بندی : Android Java

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4983
1 نظر
android : سوال شما الان دقیقا چی هست ؟ شما میخواید بدونید چرا اینترفیس دارای سازنده کلاس نیست ؟

امتیاز کاربر : 25   رتبه کاربر : 28   تاریخ ثبت : 04:11 1399/06/06
هوش مصنوعی

پاسخ هوش مصنوعی

در جاوا، اینترفیس ها قراردادهایی هستند که مشخص می کنند یک کلاس چه متدهایی باید پیاده سازی کند. اما اینترفیس ها نمی توانند به طور مستقیم نمونه سازی شوند زیرا متدهای آن ها به تنهایی پیاده سازی ندارند.

در کدی که شما آورده اید، شما در حال ایجاد یک کلاس ناشناخته (anonymous class) هستید که اینترفیس `iClickListener` را پیاده سازی می کند. این به شما اجازه می دهد برای متدهای تعریف شده در اینترفیس، بدنه مناسب را در آن کلاس ناشناخته بنویسید.

به همین دلیل، در خط زیر:

new Adapter.iClickListener()

شما در واقع یک کلاس ناشناخته (anonymous class) ایجاد می کنید که از اینترفیس `iClickListener` پیروی می کند و متد `inItemClick(int position)` را پیاده سازی می نمایید. این به این معناست که شما هر بار که یک تغییر در متد `inItemClick` اعمال کنید، می توانید رفتار مخصوص به خود را برای آن تعریف کنید.

به طور خلاصه، شما نمی توانید مستقیماً از یک اینترفیس یک شیء ایجاد کنید، اما می توانید با استفاده از کلاس های ناشناخته از آن اینترفیس استفاده کنید تا رفتار مورد نظر خود را پیاده سازی کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : android 21:50 1399/06/06

اینترفیس ها در واقع کلاس نیستند. بنابراین در بدنه خودشون دارای سازنده یا Constructor نیستند. اما برای استفاده از اونها باید در بدنه کلاس initial بشن. برای initial کردن یا ساختن یک نمونه از اینترفیس ها به دو صورت میشه این کار رو انجام داد.

روش اول تزریق وابستگی یا Dependency Injection هستند که میشه گفت در قطعه کد اولی که فرستادید این کار انجام شده.

روش دوم هم ساختن یک نمونه از اینترفیس هست که در قطعه کد دوم استفاده شده.

 

معمولا توی برنامه نویسی به روش اول بیشتر کار میشه. ولی ممکنه اینترفیسی باشه که فقط در یک بخش کوچک از کد شما نیاز به استفاده داشته باشه. بنابراین نیاز نیست به روش اول در سازنده اون کلاس initial بشه و میشه در همون بخش از کد یک نمونه ازش new کرد و استفاده کرد تا با این روش منابع کمتری استفاده بشه.

به این پاسخ امتیاز بدهید    1
امتیاز: 25 رتبه: 28
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود